package com.mengxj.anno;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * 注解：
 * 用@interface来声明
 * 使用时候前面需要加上@符号
 * 只可以声明变量，不能有方法
 * 声明变量的方式：
 *  类型 变量名()
 * 当我们生命属性了，那么在使用的时候，属性不能为空。也就是说注解使用时所有属性不能为空
 * 声明属性的默认值：
 *  类型 变量名() default 默认值
 * 当且仅当只有一个属性名为value需要赋值，使用时可以简写成 @注解名("value属性的值")，这也就是‘注解的简写’
 * 当除了value以外还有别的需要赋值，那么需要正常写，注解的简写不生效
 *
 * @ Target注解，是jdk自带的，它是用来声明注解可以写在哪里，比如说：写在类上面，写在方法上面...
 * 也就是说@ Target注解是修饰注解的注解，这种注解我梦称之为‘元注解’
 *
 * 元注解还有个@ Retention，他是用来声明注解的作用周期
 *  java运行：java文件 -- class文件    class文件运行
 *
 * RetentionPolicy.RUNTIME可以在运行时候生效，一般是带有一定功能的注解
 *
 * 只有在写代码时候用的注解，为了就是看清楚代码，比如：@Override  @FunctionInterfance
 * @author mengxj
 */
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.FIELD, ElementType.METHOD})
public @interface MyAnno {

    String value() default "";

    String address() default "长春";

    String name() default "张三";
}
